/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package prop;

import java.util.HashMap;
import java.util.Map;
import prop.condiciones.*;

/**
 *
 * @author Jose Maria Palacio
 */

public class DataManagerEstrategia {
    protected DataManager LeerEst;
    protected Map<String,Condicion> MapaCondiciones;

    public DataManagerEstrategia() {
        
    }

    public DataManagerEstrategia(String nom) {
       LeerEst = new DataManager(nom);
       MapaCondiciones = new HashMap<String,Condicion>();

       MapaCondiciones.put("menor", new CondicionMenor());
       MapaCondiciones.put("igual", new CondicionIgual());
       MapaCondiciones.put("mayor", new CondicionMayor());
       MapaCondiciones.put("midinero", new CondicionMiDinero());
       MapaCondiciones.put("dinero", new CondicionDinero());
       /*
        Aqui faltan todos los MapaCondiciones.put(id, SubclaseCondicion);
        *                   y MapaAccion.put(id, SubclaseAccion);
        */
    }

    public void leerEstrategia(Estrategia estrategia) {
       String nom = LeerEst.leerNombre();
       do {
           Regla regla = new Regla();
           Condicion cond = (Condicion)MapaCondiciones.get(nom).clone();
           cond.setEstrategia(estrategia);
           do {
               String param = LeerEst.leerParametro();
               while (!param.equals("ULTIMOPARAMETRO")) {
                   cond.addParametro(param);
                   param = LeerEst.leerParametro();
               }
               regla.addCondicion(cond);
               nom = LeerEst.leerNombre();
               if (!nom.equals(":")) {
                   cond = (Condicion)MapaCondiciones.get(nom).clone();
                   cond.setEstrategia(estrategia);
               }
           } while (!nom.equals(":"));
           nom = LeerEst.leerNombre();
           Accion acc = new Accion(nom);
           acc.setEstrategia(estrategia);
           String param = LeerEst.leerParametro();
           while (!param.equals("ULTIMOPARAMETRO")) {
               acc.addParametro(param);
               param = LeerEst.leerParametro();
           }
           regla.setAccion(acc);
           estrategia.addRegla(regla);
           nom = LeerEst.leerNombre();
       } while (!nom.equals("FIN"));
    }
}
